在 SwiftUI 中,@Binding 是一個強大的屬性包裝器,用於在不同視圖間共享和更新數據。當一個視圖需要從其父視圖中接收並更新數據時,@Binding 就派上用場了。這樣,子視圖可以直接修改父視圖中的狀態,而不需要顯式地傳遞回調函數。
@Binding定義父視圖中的狀態:
父視圖通常會擁有一個狀態屬性,使用 @State 來聲明。
struct ParentView: View {
    @State private var isOn = false
    var body: some View {
        ChildView(isOn: $isOn)
    }
}
在子視圖中使用 @Binding:
子視圖接收來自父視圖的綁定變量,並且可以使用 @Binding 更新這些變量。
struct ChildView: View {
    @Binding var isOn: Bool
    var body: some View {
        Toggle("Switch", isOn: $isOn)
    }
}
父子視圖的數據傳遞:
當子視圖中 Toggle 的狀態改變時,父視圖中的 isOn 也會隨之改變,達到雙向數據綁定的效果。
想像一個設定頁面,其中的開關狀態由父視圖管理,而開關元件在子視圖中。這樣的結構讓代碼更加模組化,並且易於維護。透過 @Binding,不僅能實現數據共享,還能避免冗長的參數傳遞或狀態同步問題。
總結來說,@Binding 是 SwiftUI 中用來在視圖間同步和共享狀態的核心工具,適合需要雙向數據流的場景。